/*
 * 支付宝平台(JAVA) SDK
 * 生活号操作包
 */
package org.alipay4j.component.life;

import java.util.HashMap;
import java.util.Map;

import org.alipay4j.Alipay;
import org.alipay4j.AlipayException;
import org.alipay4j.Configuration;
import org.alipay4j.component.AbstractComponent;
import org.alipay4j.http.AlipayHttpsClient;
import org.alipay4j.http.Response;
import org.alipay4j.model.user.Followers;
import org.alipay4j.util.ObjectHelper;

import com.alibaba.fastjson.JSONObject;

/**
 * 用户管理组件
 * @author 贺亮
 */
public class UserComponent extends AbstractComponent {

	public UserComponent(Alipay alipay) {
		super(alipay);
	}
	
	/**
	* @Title: 获取关注者列表 
	* @Description: 公众号可通过本接口来获取帐号的关注者列表，关注者列表由一串userId组成。一次拉取调用最多拉取10000个关注者的userId，可以通过多次拉取的方式来满足需求。 公众号可通过本接口来获取帐号的关注者列表，关注者列表由一串userId组成。一次拉取调用最多拉取10000个关注者的userId，可以通过多次拉取的方式来满足需求。
	* @author heliang
	* @param next_user_id 当关注者数量超过10000时使用，本次拉取数据中第一个用户的userId，从上次接口调用返回值中获取。第一次调用置空
	* @return Followers
	* @throws AlipayException 
	 */
	public Followers followBatchquery(String next_user_id) throws AlipayException {
		//组装请求参数
		Map<String, String> body = new HashMap<String, String>();
		body.put("next_user_id", next_user_id);
		body.put("method", "alipay.open.public.follow.batchquery");
		Response response = new AlipayHttpsClient(super.alipay).postBizContent(body);
		//根据请求结果判定，是否验证成功
		JSONObject bodyRes = getObjRes(response, "alipay_open_public_follow_batchquery_response");
    	if (Configuration.isDebug()) {
            System.out.println("alipayOpenPublicFollowBatchqueryResponse返回json：" + bodyRes.toString());
        }
        String codeRes = bodyRes.getString("code");
        if (ObjectHelper.isNotEmpty(codeRes)&&!"10000".equals(codeRes)) {
        	String sub_code = bodyRes.getString("sub_code");
        	String sub_msg = bodyRes.getString("sub_msg");
            //返回异常信息
            throw new AlipayException(getCause(sub_code,sub_msg));
        }
        Followers followers = JSONObject.toJavaObject(bodyRes, Followers.class);
		return followers;
	}
	
	/**
	* @Title: 生活号关注用户查询接口 
	* @Description: 开发者可以通过user_id查询该用户是否已关注了当前的生活号，据此可以针对关注用户实现不同的业务逻辑
	* @author heliang
	* @param user_id 用户id
	* @return boolean
	* @throws AlipayException 
	 */
	public boolean followQuery(String user_id) throws AlipayException {
        //组装请求参数
        Map<String, String> body = new HashMap<String, String>();
        body.put("user_id", user_id);
        body.put("method", "alipay.open.public.user.follow.query");
        Response response = new AlipayHttpsClient(super.alipay).postBizContent(body);
        //根据请求结果判定，是否验证成功
        JSONObject bodyRes = getObjRes(response, "alipay_open_public_user_follow_query_response");
        if (Configuration.isDebug()) {
            System.out.println("alipay_open_public_user_follow_query_response返回json：" + bodyRes.toString());
        }
        String codeRes = bodyRes.getString("code");
        if (ObjectHelper.isNotEmpty(codeRes)&&!"10000".equals(codeRes)) {
            String sub_code = bodyRes.getString("sub_code");
            String sub_msg = bodyRes.getString("sub_msg");
            //返回异常信息
            throw new AlipayException(getCause(sub_code,sub_msg));
        }
        //用户是否关注，T代表已关注，F代表未关注
        String is_follow = bodyRes.getString("is_follow");
        return "T".equals(is_follow);
    }
}
